AI 影像辨識可以自動分析和理解視覺數據,應用於人臉識別、車牌辨識、物體檢測等多個領域。被廣泛用於安全監控、智能交通、醫療診斷等
OpenCV官方GitHub:
https://github.com/opencv/opencv/tree/4.x/data
人臉偵測模型:
https://github.com/opencv/opencv/blob/4.x/data/haarcascades/haarcascade_frontalface_default.xml
人臉馬賽克模型:
https://github.com/opencv/opencv/blob/4.x/data/haarcascades_cuda/haarcascade_frontalface_default.xml
行人偵測模型:
https://github.com/opencv/opencv/blob/4.x/data/haarcascades_cuda/haarcascade_fullbody.xml
從OpenCV官方下 GitHub 下載模型後,將其與 Python 檔放在同一個資料夾中,並使用 cv2.CascadeClassifier 將欲使用模型載入預先訓練的分類器檔案的類別,在使用 detectMultiScale 掃描整個影像,使用不同的比例和位置偵測物體,並返回所有偵測到的人臉的邊界框
import cv2
img = cv2.imread('baby.jpg')
img = cv2.resize(img, (300, 300))
cv2.imshow('Baby', img)
test = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 載入人臉識別分類器
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# 偵測人臉
faces = face_cascade.detectMultiScale(test)
# 抓取每個人臉,繪製方框
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 1)
cv2.imshow('facial recognition', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
範例:
使用 detectMultiScale 掃描整個影像,使用不同的比例和位置偵測物體,並返回所有偵測到的人臉的馬賽克
import cv2
img = cv2.imread('people.jpg')
# img = cv2.resize(img, (450, 450))
cv2.imshow('people', img)
test = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 載入人臉識別分類器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(test, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 對每個人臉進行馬賽克處理
for (x, y, w, h) in faces:
face = img[y:y+h, x:x+w]
face = cv2.resize(face, (w//10, h//10))
face = cv2.resize(face, (w, h), interpolation=cv2.INTER_NEAREST)
img[y:y+h, x:x+w] = face
cv2.imshow('Mosaic', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
範例:
使用 detectMultiScale 掃描整個影像,使用不同的比例和位置偵測物體,並返回所有偵測到的行人的邊界框
import cv2
# 載入圖像
img = cv2.imread('man.jpg')
# 轉換為灰階圖像
test = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 載入全身檢測模型
body_cascade = cv2.CascadeClassifier('haarcascade_fullbody.xml')
# 偵測圖像中的人物
bodies = body_cascade.detectMultiScale(test, 1.1, 3)
# 繪製偵測框
for (x, y, w, h) in bodies:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
cv2.imshow('fullbody', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
範例:
圖片來源:
https://pixabay.com/
參考資料:
https://steam.oxxostudio.tw/category/python/ai/ai-index.html